
// 导入数据库操作模块
const db = require("../db/index")

// 导入加密模块 bcryptjs 
const bcrypt = require('bcryptjs')

// 导入jwt模块
const jwt = require('jsonwebtoken')

//定义密钥
const secret = 'secretKey'

// 注册新用户
exports.regUser = (req, res) => {
    // 获取客户端提交到服务器的用户名和密码
    const userInfo = req.body

    // 校验用户名和密码是否为空
    if (!userInfo.username || !userInfo.password) {
        return res.send({
            state: 1,
            message:"用户名和密码不能为空"
        })
    }
    // 定义sql语句，查询用户名是否被占用
    const sqlStr = 'SELECT * FROM en_users where username=?'
    db.query(sqlStr, [userInfo.username], (err, results) => {
        // 如果执行sql语句失败，传递报错信息
        if (err) {
            // return res.send({ status:1, message: err.message})
            return res.cc(err)
        }
        // 如果用户名被占用，传递信息
        if (results.length > 0) {
            // return res.send({ status:1,message:"用户名被占用请更换用户名"})
            res.cc("用户名被占用请更换用户名")
        }
  
        // 调用bcrypt.hashSync()对密码进行加密
        userInfo.password = bcrypt.hashSync(userInfo.password, 10)

        // 定义插入新用户的sql语句
        const sql = 'insert into en_users set ?'
        db.query(sql, { username: userInfo.username, password: userInfo.password }, (err, results) => {
            // 判断sql语句是否执行成功
            if (err) return res.cc(err)
            // 判断影响行数是否为1
            if (results.affectedRows !== 1) res.send({ status: 1, message: "注册用户失败请稍后再试" })
            // 注册用户成功
            res.send({status:0,message:"注册成功！"})
        })



    })
}






// 登陆 
exports.login = (req, res) => {
    console.log("请求1", req.query)
    // 获取客户端提交到服务器的用户名和密码
    const userInfo = req.body
    console.log(userInfo,"login")

    // 定义 SQL 语句，查询验证用户名和密码
    const sqlStr = 'SELECT * FROM en_users WHERE username = ? AND password = ?';
    
    db.query(sqlStr, [userInfo.username, userInfo.password], (err, results) => {
        console.log(results, "结果")
        if (err) {
            console.log(err)
            return res.send({ status:1, message: err.message})
        } else {
            console.log(results.length, "没有错误")
            if (results.length == 1) {
                res.send({
                    status: 0,
                    message: "登录成功",
                    token: jwt.sign({username: userInfo.username},secret,{expiresIn: '10s'})
                })
            } else {
                res.send("用户名或密码错误")
            }
        }

    })
    // res.send('login OK')
}

//查询顾客列表
exports.clientList = (req, res, next) => {
    // 
    console.log("查询顾客列表")
    // console.log(req.headers.authorization.split(' ')[1])
    const token = req.headers.authorization.split(' ')[1]
    jwt.verify(token, secret, (err, decoded) => {
        if (err) {
            if(err.name === 'TokenExpiredError') {
                // Token 过期，处理逻辑
                console.error('Token expired:', err);
                res.status(401).send('Token expired');
              } else {
                // 其他 Token 验证错误
                console.error('Token verification failed:', err);
                res.status(401).send('Unauthorized');
              }
        }else {
            // Token 有效，将解码后的信息存储在 req 中，方便后续路由处理
            req.user = decoded;
            // next();
                //定义 SQL 语句  查询顾客列表
            const sqlStr = 'SELECT * FROM my_db_01.clients'
            
            db.query(sqlStr, (err, results) => {
                if (err) {
                    console.log(err)
                    return res.send({ status:1,message: err.message})
                } else {
                    res.status(200).send({
                        status: 0,
                        message: "获取成功",
                        results:results
                    })
                }
            })
          }
    })
    // return;

}

//新增客户列表信息
exports.clients = (req, res) => {
    console.log("新增客户")
    const userInfo = req.body
    console.log(userInfo)
            // 定义插入新用户的sql语句
        const sql = 'insert into clients set ?'
    db.query(sql,
        {
            name: userInfo.name,
            tel: userInfo.tel,
            product: userInfo.product,
            date: userInfo.date,
            email: userInfo.email,
            address: userInfo.address,
            liuyan: userInfo.liuyan,
            source: userInfo.source
        },
        (err, results) => {
            console.log(err)
            console.log(results)
                // 判断sql语句是否执行成功
                if (err) return res.cc(err)
                // 判断影响行数是否为1
                if (results.affectedRows !== 1) res.send({ status: 1, message: "添加失败请稍后再试" })
                // 注册用户成功
                res.send({status:0,message:"添加成功！"})
            })
}
